

#pragma mark - 字符串
/**
 不可变
 content     = 0x103227968（源）
 str1        = 0x103227968（等号）
 str2        = 0x103227968（copy）
 str3        = 0x60000045a160（mutableCopy）
 str_copy    = 0x103227968（byCopy）
 str_strong  = 0x103227968（byStrong）
 
 可变
 content     = 0x604000252060（源）
 str1        = 0x604000252060（等号）
 str2        = 0xa000000003635343（copy）
 str3        = 0x600000050470（mutableCopy）
 str_copy    = 0xa000000003635343（byCopy）
 str_strong  = 0x604000252060（byStrong）
 
 结论：
 不可变字符串
 等号赋值，copy赋值，copy修饰，strong修饰均是浅拷贝（指针拷贝）
 mutableCopy赋值是深拷贝，并且生成的新字符串是可变字符串
 
 可变字符串
 等号赋值，strong修饰是浅拷贝（指针拷贝）
 copy赋值，mutableCopy赋值，copy修饰都是深拷贝
 mutableCopy赋值生成的新字符串为可变字符串
 */

#pragma mark - 非集合对象
/**
 p（源头）                = 0x6040000c4ad0
 p1(等号赋值)             = 0x6040000c4ad0  浅复制
 p2（copy赋值）           = 0x6040000c79a0  深复制
 p3（mutableCopy赋值）    = 0x6000000c54e0  深复制
 p4（copy修饰，等号赋值）   = 0x6000000c8ce0  深复制
 p5（strong修饰，等号赋值） = 0x6040000c4ad0  浅复制
 */

#pragma mark - 集合对象

/**
 >>>> 不可变数组
 temp = 0x60000022f980     p      = 0x60000001e660
 arr1 = 0x60000022f980     arr1_p = 0x60000001e660    arr1_p.name = testArrayI0    arr1_class = __NSArrayI
 arr2 = 0x60000022f980     arr2_p = 0x60000001e660    arr2_p.name = testArrayI0    arr2_class = __NSArrayI
 arr3 = 0x600000440a80     arr3_p = 0x60000001e660    arr3_p.name = testArrayI0    arr3_class = __NSArrayM
 结论：
 对不可变数组进行操作时
 等号和copy：对数组浅拷贝，对元素浅拷贝，真实类型：不可变
 mutableCopy：对数组深拷贝，对元素浅拷贝，真实类型：可变
 
 >>>> 可变数组
 orig = 0x60400003e340     p      = 0x6040000dcfc0
 arr1 = 0x60400003e340     arr1_p = 0x6040000dcfc0    arr1_p.name = testArrayI0    arr1_class = __NSArrayI
 arr2 = 0x60400003e340     arr2_p = 0x6040000dcfc0    arr2_p.name = testArrayI0    arr2_class = __NSArrayI
 arr3 = 0x6040002562c0     arr3_p = 0x6040000dcfc0    arr3_p.name = testArrayI0    arr3_class = __NSArrayM
 对不可变数组进行操作
 等号赋值：对数组浅拷贝，对元素浅拷贝，真实类型：可变
 copy： 对数组深拷贝，对元素浅拷贝，真实类型：不可变
 mutableCopy：对数组深拷贝，对元素浅拷贝，真实类型：可变
 
 copyItems 方法，单层深拷贝
 如需实现全新拷贝，则必须每一层都要进行拷贝，赋值等操作。
 */

